package com.be.beadmin.basicData.service;


import com.be.beadmin.basicData.dto.input.UserDto;
import com.be.beadmin.basicData.dto.input.UserOrgFilter;
import com.be.beadmin.basicData.dto.input.UserRolesDto;
import com.be.beadmin.basicData.dto.output.UserEx;
import com.be.beadmin.basicData.dto.output.UserNameId;
import com.be.beadmin.basicData.entity.Role;
import com.be.beadmin.basicData.entity.User;
import org.springframework.data.domain.Page;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
import java.util.Set;

public interface UserService {

    /**
     * 获取个人用户信息
     * @param request
     * @return
     */
     UserEx viewBaseInfo(HttpServletRequest request);

    /**
     * 获取当前用户的所有角色
     * @param request
     * @return
     */
    Set<Role> getRolesByCurrentUser(HttpServletRequest request);

    /**
     * 获取某个用户的角色
     * @param user
     * @return
     */
    Set<Role> getRolesByUser(User user);

    /**
     * 获取某个用户的角色
     * @param role
     * @return
     */
    List<User> getUserByRole(Role role);

    /**
     * 用户分页查询
     * @param pageEntity
     * @return
     */
     Page<UserEx> getUserByPage(UserOrgFilter pageEntity);

    /**
     * 增加用户
     * @param userDto
     */
    void addUser(UserDto userDto);


    /**
     * 更新用户密码
     * @param userDto
     * @return
     */
    void updatePassword(UserDto userDto);

    /**
     * 更新用户
     * @param userDto
     */
    void updateUser(UserDto userDto);

    /**
     * 删除用户
     * @param userDto
     */
    void delUser(UserDto userDto);

    /**
     * 删除多个用户
     * @param userDtoList
     */
    void delUsers(List<UserDto> userDtoList);

    /**
     * 用户锁定
     * @param userDto
     */
    void lockUser(UserDto userDto);

    /**
     * 保存用户角色信息
     * @param userRolesDto
     */
    void saveRoles(UserRolesDto userRolesDto);

    /**
     * 获取角色信息
     * @param userid
     * @return
     */
    Map<String,Object> ajaxLoadTransferUserRelRole(String userid);


    /**
     * 管理员匿名登录
     * @param userName
     * @return
     */
    String reLogin(String userName);


    /**
     * 是当前用户否为某个角色
     * @param roleCode
     * @return
     */
    boolean isRole(HttpServletRequest request, String roleCode);

    /**
     * 是当前用户否为某个角色
     * @param user
     * @param roleName
     * @return
     */

    boolean isRole(User user, String roleName);

    /**
     * 是当前用户否为admin系统管理员
     * @return
     */
    boolean isAdmin(HttpServletRequest request);


    /**
     * 根据角色类型获取该角色的所有用户
     * @param roleName
     * @return
     */
    List<User> getUserByRoleType(String roleName);

    /**
     * 根据id获取用户
     * @return
     */
    User getUserById(String id);

    /**
     * 根据角色获取所有用户id和用户名
     * @param roleName
     * @return
     */
    List<UserNameId> getUserNameAndIdByRoleType(String roleName);

    /**
     * 获取所有用户id和用户名
     * @return
     */
    List<UserNameId> getAllUserNameAndId();
}
